Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

TAO_Profile Class Reference

Defines the Profile interface. More...

#include <Profile.h>

Inheritance diagram for TAO_Profile:

Inheritance graph
[legend]
Collaboration diagram for TAO_Profile:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 TAO_Profile (CORBA::ULong tag, TAO_ORB_Core *orb_core, const TAO_GIOP_Message_Version &version)
 Constructor.
virtual ~TAO_Profile (void)
 If you have a virtual method you need a virtual dtor.
Non virtual methods for the profile classes.
CORBA::ULong tag (void) const
 The tag, each concrete class will have a specific tag value.
const TAO_GIOP_Message_Versionversion (void) const
TAO_ORB_Coreorb_core (void) const
 Get a pointer to the TAO_ORB_Core.
CORBA::ULong _incr_refcnt (void)
 Increase the reference count by one on this object.
CORBA::ULong _decr_refcnt (void)
void forward_to (TAO_MProfile *mprofiles)
 Keep a pointer to the forwarded profile.
TAO_MProfileforward_to (void)
 MProfile accessor.
const TAO_Tagged_Componentstagged_components (void) const
TAO_Tagged_Componentstagged_components (void)
 The tag, each concrete class will have a specific tag value.
void add_tagged_component (const IOP::TaggedComponent &component ACE_ENV_ARG_DECL)
 Add the given tagged component to the profile.
CORBA::Short addressing_mode (void) const
const TAO::ObjectKeyobject_key (void) const
TAO::ObjectKey_key (void) const
Template methods that needs to be implemented by the
concrete classes. Some of the methods may be overridden only under specila circumstances.

virtual int encode (TAO_OutputCDR &stream) const
 Encode this profile in a stream, i.e. marshal it.
virtual int decode (TAO_InputCDR &cdr)
 Initialize this object using the given CDR octet string.
IOP::TaggedProfilecreate_tagged_profile (void)
virtual void policies (CORBA::PolicyList *policy_list ACE_ENV_ARG_DECL)
virtual void get_policies (CORBA::PolicyList &policy_list ACE_ENV_ARG_DECL)
 Accessor for the client exposed policies of this profile.
virtual int supports_multicast (void) const
 Returns true if this profile can specify multicast endpoints.
virtual bool supports_non_blocking_oneways (void) const
 Returns true if this profile supports non blocking oneways.
virtual void addressing_mode (CORBA::Short addr_mode ACE_ENV_ARG_DECL)
virtual char object_key_delimiter (void) const =0
 The object key delimiter.
virtual void parse_string (const char *string ACE_ENV_ARG_DECL)
virtual char * to_string (ACE_ENV_SINGLE_ARG_DECL)=0
virtual int encode_endpoints (void)=0
virtual TAO_Endpointendpoint (void)=0
virtual CORBA::ULong endpoint_count (void) const =0
 Return how many endpoints this profile contains.
CORBA::Boolean is_equivalent (const TAO_Profile *other_profile)
 Verify profile equivalance.
virtual CORBA::ULong hash (CORBA::ULong max ACE_ENV_ARG_DECL)=0
 Return a hash value for this object.

Protected Member Functions

 TAO_Profile (CORBA::ULong tag, TAO_ORB_Core *orb_core, const TAO::ObjectKey &key, const TAO_GIOP_Message_Version &version)
 To be used by inherited classes.
void set_tagged_components (TAO_OutputCDR &cdr)
virtual CORBA::Boolean do_is_equivalent (const TAO_Profile *other)=0
 Profile equivalence template method invoked on subclasses.
virtual CORBA::Boolean is_equivalent_hook (const TAO_Profile *other)
 Allow services to apply their own definition of "equivalence.".
CORBA::ULong hash_service_i (CORBA::ULong m)
Protected template methods.
virtual int decode_profile (TAO_InputCDR &cdr)=0
 Decode the protocol specific profile details.
virtual void create_profile_body (TAO_OutputCDR &cdr) const =0
 Creates an encapsulation of the ProfileBody struct in the cdr.
virtual int decode_endpoints (void)=0
virtual void parse_string_i (const char *string ACE_ENV_ARG_DECL)=0
 Protocol specific implementation of parse_string ().

Protected Attributes

TAO_GIOP_Message_Version version_
 IIOP version number.
TAO_Tagged_Components tagged_components_
 The tagged components.
CORBA::Boolean are_policies_parsed_
CORBA::Short addressing_mode_
IOP::TaggedProfiletagged_profile_
 Our tagged profile.
TAO::Refcounted_ObjectKeyref_object_key_
 object_key associated with this profile.

Private Member Functions

TAO_MProfileforward_to_i (void)
 This object keeps ownership of this object.
void verify_orb_configuration (ACE_ENV_SINGLE_ARG_DECL)
void verify_profile_version (ACE_ENV_SINGLE_ARG_DECL)
 TAO_Profile (const TAO_Profile &)
void operator= (const TAO_Profile &)

Private Attributes

CORBA::ULong tag_
 IOP protocol tag.
TAO_ORB_Coreorb_core_
 Pointer to the ORB core.
TAO_MProfileforward_to_
ACE_Lockrefcount_lock_
 Mutex to protect reference count.
CORBA::ULong refcount_
 Number of outstanding references to this object.

Detailed Description

Defines the Profile interface.

An abstract base class for representing object location information. This is based on the CORBA IOR definitions.


Constructor & Destructor Documentation

TAO_Profile::TAO_Profile CORBA::ULong  tag,
TAO_ORB_Core orb_core,
const TAO_GIOP_Message_Version version
 

Constructor.

TAO_Profile::~TAO_Profile void   )  [virtual]
 

If you have a virtual method you need a virtual dtor.

TAO_Profile::TAO_Profile CORBA::ULong  tag,
TAO_ORB_Core orb_core,
const TAO::ObjectKey key,
const TAO_GIOP_Message_Version version
[protected]
 

To be used by inherited classes.

TAO_Profile::TAO_Profile const TAO_Profile  )  [private]
 


Member Function Documentation

CORBA::ULong TAO_Profile::_decr_refcnt void   ) 
 

Decrement the object's reference count. When this count goes to 0 this object will be deleted.

CORBA::ULong TAO_Profile::_incr_refcnt void   ) 
 

Increase the reference count by one on this object.

TAO::ObjectKey * TAO_Profile::_key void   )  const
 

Obtain the object key, return 0 if the profile cannot be parsed. The memory is owned by the caller!

Reimplemented in TAO_Unknown_Profile.

void TAO_Profile::add_tagged_component const IOP::TaggedComponent &component  ACE_ENV_ARG_DECL  ) 
 

Add the given tagged component to the profile.

virtual void TAO_Profile::addressing_mode CORBA::Short addr_mode  ACE_ENV_ARG_DECL  )  [virtual]
 

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.

ACE_INLINE CORBA::Short TAO_Profile::addressing_mode void   )  const
 

Return the current addressing mode for this profile. In almost all cases, this is TAO_Target_Specification::Key_Addr.

virtual void TAO_Profile::create_profile_body TAO_OutputCDR cdr  )  const [protected, pure virtual]
 

Creates an encapsulation of the ProfileBody struct in the cdr.

Implemented in TAO_IIOP_Profile, and TAO_Unknown_Profile.

IOP::TaggedProfile * TAO_Profile::create_tagged_profile void   ) 
 

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.

int TAO_Profile::decode TAO_InputCDR cdr  )  [virtual]
 

Initialize this object using the given CDR octet string.

Reimplemented in TAO_Unknown_Profile.

virtual int TAO_Profile::decode_endpoints void   )  [protected, pure virtual]
 

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.

Implemented in TAO_IIOP_Profile, and TAO_Unknown_Profile.

virtual int TAO_Profile::decode_profile TAO_InputCDR cdr  )  [protected, pure virtual]
 

Decode the protocol specific profile details.

Implemented in TAO_IIOP_Profile, and TAO_Unknown_Profile.

virtual CORBA::Boolean TAO_Profile::do_is_equivalent const TAO_Profile other  )  [protected, pure virtual]
 

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.

Implemented in TAO_IIOP_Profile, and TAO_Unknown_Profile.

int TAO_Profile::encode TAO_OutputCDR stream  )  const [virtual]
 

Encode this profile in a stream, i.e. marshal it.

Reimplemented in TAO_Unknown_Profile.

virtual int TAO_Profile::encode_endpoints void   )  [pure virtual]
 

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.

Implemented in TAO_IIOP_Profile, and TAO_Unknown_Profile.

virtual TAO_Endpoint* TAO_Profile::endpoint void   )  [pure virtual]
 

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.

Implemented in TAO_IIOP_Profile, and TAO_Unknown_Profile.

virtual CORBA::ULong TAO_Profile::endpoint_count void   )  const [pure virtual]
 

Return how many endpoints this profile contains.

Implemented in TAO_IIOP_Profile, and TAO_Unknown_Profile.

ACE_INLINE TAO_MProfile * TAO_Profile::forward_to void   ) 
 

MProfile accessor.

ACE_INLINE void TAO_Profile::forward_to TAO_MProfile mprofiles  ) 
 

Keep a pointer to the forwarded profile.

ACE_INLINE TAO_MProfile * TAO_Profile::forward_to_i void   )  [private]
 

This object keeps ownership of this object.

virtual void TAO_Profile::get_policies CORBA::PolicyList &policy_list  ACE_ENV_ARG_DECL  )  [virtual]
 

Accessor for the client exposed policies of this profile.

virtual CORBA::ULong TAO_Profile::hash CORBA::ULong max  ACE_ENV_ARG_DECL  )  [pure virtual]
 

Return a hash value for this object.

Implemented in TAO_IIOP_Profile, and TAO_Unknown_Profile.

CORBA::ULong TAO_Profile::hash_service_i CORBA::ULong  m  )  [protected]
 

CORBA::Boolean TAO_Profile::is_equivalent const TAO_Profile other_profile  ) 
 

Verify profile equivalance.

Two profiles are equivalent if their tag, object_key, version and all endpoints are the same.

See also:
do_is_equivalent_i()

is_equivalent_hook()

Returns:
true if this profile is equivalent to other_profile.

CORBA::Boolean TAO_Profile::is_equivalent_hook const TAO_Profile other  )  [protected, virtual]
 

Allow services to apply their own definition of "equivalence.".

This method differs from the do_is_equivalent() template method in that it has a default implementation that may or not be applicable to all TAO_Profile subclasses.

Reimplemented in TAO_Unknown_Profile.

ACE_INLINE const TAO::ObjectKey & TAO_Profile::object_key void   )  const
 

Deprecated:
Return a reference to the Object Key.

Reimplemented in TAO_Unknown_Profile.

virtual char TAO_Profile::object_key_delimiter void   )  const [pure virtual]
 

The object key delimiter.

Implemented in TAO_IIOP_Profile, and TAO_Unknown_Profile.

void TAO_Profile::operator= const TAO_Profile  )  [private]
 

ACE_INLINE TAO_ORB_Core * TAO_Profile::orb_core void   )  const
 

Get a pointer to the TAO_ORB_Core.

virtual void TAO_Profile::parse_string const char *string  ACE_ENV_ARG_DECL  )  [virtual]
 

Initialize this object using the given input string. Supports URL style of object references

Reimplemented in TAO_Unknown_Profile.

virtual void TAO_Profile::parse_string_i const char *string  ACE_ENV_ARG_DECL  )  [protected, pure virtual]
 

Protocol specific implementation of parse_string ().

Implemented in TAO_IIOP_Profile, and TAO_Unknown_Profile.

void TAO_Profile::policies CORBA::PolicyList *policy_list  ACE_ENV_ARG_DECL  )  [virtual]
 

This method sets the client exposed policies, i.e., the ones propagated in the IOR, for this profile.

void TAO_Profile::set_tagged_components TAO_OutputCDR cdr  )  [protected]
 

Helper method that encodes the endpoints for RTCORBA as tagged_components.

int TAO_Profile::supports_multicast void   )  const [virtual]
 

Returns true if this profile can specify multicast endpoints.

bool TAO_Profile::supports_non_blocking_oneways void   )  const [virtual]
 

Returns true if this profile supports non blocking oneways.

ACE_INLINE CORBA::ULong TAO_Profile::tag void   )  const
 

The tag, each concrete class will have a specific tag value.

ACE_INLINE TAO_Tagged_Components & TAO_Profile::tagged_components void   ) 
 

The tag, each concrete class will have a specific tag value.

ACE_INLINE const TAO_Tagged_Components & TAO_Profile::tagged_components void   )  const
 

Access the tagged components, notice that they they could be empty (or ignored) for non-GIOP protocols (and even for GIOP-1.0)

virtual char* TAO_Profile::to_string ACE_ENV_SINGLE_ARG_DECL   )  [pure virtual]
 

Return a string representation for this profile. Client must deallocate memory. Only one endpoint is included into the string.

Implemented in TAO_IIOP_Profile, and TAO_Unknown_Profile.

void TAO_Profile::verify_orb_configuration ACE_ENV_SINGLE_ARG_DECL   )  [private]
 

Verify that the current ORB's configuration supports tagged components in IORs.

void TAO_Profile::verify_profile_version ACE_ENV_SINGLE_ARG_DECL   )  [private]
 

Verify that the given profile supports tagged components, i.e. is not a GIOP 1.0 profile.

ACE_INLINE const TAO_GIOP_Message_Version & TAO_Profile::version void   )  const
 

Return a pointer to this profile's version. This object maintains ownership.


Member Data Documentation

CORBA::Short TAO_Profile::addressing_mode_ [protected]
 

The current addressing mode. This may be changed if a remote server sends back an address mode exception.

CORBA::Boolean TAO_Profile::are_policies_parsed_ [protected]
 

Flag indicating whether the lazy decoding of the client exposed policies has taken place.

TAO_MProfile* TAO_Profile::forward_to_ [private]
 

The TAO_MProfile which contains the profiles for the forwarded object.

TAO_ORB_Core* TAO_Profile::orb_core_ [private]
 

Pointer to the ORB core.

TAO::Refcounted_ObjectKey* TAO_Profile::ref_object_key_ [protected]
 

object_key associated with this profile.

CORBA::ULong TAO_Profile::refcount_ [private]
 

Number of outstanding references to this object.

ACE_Lock* TAO_Profile::refcount_lock_ [private]
 

Mutex to protect reference count.

CORBA::ULong TAO_Profile::tag_ [private]
 

IOP protocol tag.

TAO_Tagged_Components TAO_Profile::tagged_components_ [protected]
 

The tagged components.

IOP::TaggedProfile* TAO_Profile::tagged_profile_ [protected]
 

Our tagged profile.

TAO_GIOP_Message_Version TAO_Profile::version_ [protected]
 

IIOP version number.


The documentation for this class was generated from the following files:
Generated on Thu Jun 9 00:17:59 2005 for TAO by  doxygen 1.3.9.1