TAO_SHMIOP_Profile Class Reference

This class defines the protocol specific attributes required for locating local ORBs over local IPC mechanism to use the shared memory transport. More...

#include <SHMIOP_Profile.h>

Inheritance diagram for TAO_SHMIOP_Profile:

Inheritance graph
[legend]
Collaboration diagram for TAO_SHMIOP_Profile:

Collaboration graph
[legend]
List of all members.

Public Member Functions

virtual char object_key_delimiter (void) const
 TAO_SHMIOP_Profile (const ACE_MEM_Addr &addr, const TAO::ObjectKey &object_key, const TAO_GIOP_Message_Version &version, TAO_ORB_Core *orb_core)
 TAO_SHMIOP_Profile (const char *host, CORBA::UShort port, const TAO::ObjectKey &object_key, const ACE_INET_Addr &addr, const TAO_GIOP_Message_Version &version, TAO_ORB_Core *orb_core)
 TAO_SHMIOP_Profile (TAO_ORB_Core *orb_core)
 Profile constructor, default.
 ~TAO_SHMIOP_Profile (void)
 Destructor is to be called only through <_decr_refcnt>.
virtual char * to_string (void)
 Template methods, please see Profile.h for documentation.
virtual int encode_endpoints (void)
virtual TAO_Endpointendpoint (void)
virtual CORBA::ULong endpoint_count (void) const
virtual CORBA::ULong hash (CORBA::ULong max)
void add_endpoint (TAO_SHMIOP_Endpoint *endp)

Static Public Member Functions

static const char * prefix (void)
 Return the char string prefix.

Static Public Attributes

static const char object_key_delimiter_ = '/'
 The object key delimiter that SHMIOP uses or expects.

Protected Member Functions

virtual int decode_profile (TAO_InputCDR &cdr)
 Template methods. Please see tao/Profile.h for documentation.
virtual void parse_string_i (const char *string)
virtual void create_profile_body (TAO_OutputCDR &cdr) const
virtual int decode_endpoints (void)
virtual CORBA::Boolean do_is_equivalent (const TAO_Profile *other_profile)

Private Attributes

TAO_SHMIOP_Endpoint endpoint_
CORBA::ULong count_
 Number of endpoints in the list headed by <endpoint_>.

Detailed Description

This class defines the protocol specific attributes required for locating local ORBs over local IPC mechanism to use the shared memory transport.

This class defines the SHMIOP profile.

Definition at line 45 of file SHMIOP_Profile.h.


Constructor & Destructor Documentation

TAO_SHMIOP_Profile::TAO_SHMIOP_Profile ( const ACE_MEM_Addr &  addr,
const TAO::ObjectKey &  object_key,
const TAO_GIOP_Message_Version version,
TAO_ORB_Core orb_core 
)

Profile constructor, same as above except the object_key has already been marshaled.

Definition at line 33 of file SHMIOP_Profile.cpp.

00037   : TAO_Profile (TAO_TAG_SHMEM_PROFILE,
00038                  orb_core,
00039                  object_key,
00040                  version),
00041     endpoint_ (addr,
00042                orb_core->orb_params ()->use_dotted_decimal_addresses ()),
00043     count_ (1)
00044 {
00045 }

TAO_SHMIOP_Profile::TAO_SHMIOP_Profile ( const char *  host,
CORBA::UShort  port,
const TAO::ObjectKey &  object_key,
const ACE_INET_Addr addr,
const TAO_GIOP_Message_Version version,
TAO_ORB_Core orb_core 
)

Profile constructor, this is the most efficient since it doesn't require any address resolution processing.

Definition at line 47 of file SHMIOP_Profile.cpp.

00053   : TAO_Profile (TAO_TAG_SHMEM_PROFILE,
00054                  orb_core,
00055                  object_key,
00056                  version),
00057     endpoint_ (host, port, addr),
00058     count_ (1)
00059 {
00060 }

TAO_SHMIOP_Profile::TAO_SHMIOP_Profile ( TAO_ORB_Core orb_core  ) 

Profile constructor, default.

Definition at line 62 of file SHMIOP_Profile.cpp.

TAO_SHMIOP_Profile::~TAO_SHMIOP_Profile ( void   ) 

Destructor is to be called only through <_decr_refcnt>.

Definition at line 71 of file SHMIOP_Profile.cpp.

References TAO_Endpoint::next().

00072 {
00073   // Clean up the list of endpoints since we own it.
00074   // Skip the head, since it is not dynamically allocated.
00075   TAO_Endpoint *tmp = 0;
00076 
00077   for (TAO_Endpoint *next = this->endpoint ()->next ();
00078        next != 0;
00079        next = tmp)
00080     {
00081       tmp = next->next ();
00082       delete next;
00083     }
00084 }


Member Function Documentation

void TAO_SHMIOP_Profile::add_endpoint ( TAO_SHMIOP_Endpoint endp  ) 

Add <endp> to this profile's list of endpoints (it is inserted next to the head of the list). This profiles takes ownership of <endp>.

Definition at line 321 of file SHMIOP_Profile.cpp.

References count_, endpoint_, and TAO_SHMIOP_Endpoint::next_.

Referenced by TAO_SHMIOP_Acceptor::create_shared_profile(), and decode_endpoints().

00322 {
00323   endp->next_ = this->endpoint_.next_;
00324   this->endpoint_.next_ = endp;
00325 
00326   this->count_++;
00327 }

void TAO_SHMIOP_Profile::create_profile_body ( TAO_OutputCDR cdr  )  const [protected, virtual]

Implements TAO_Profile.

Definition at line 373 of file SHMIOP_Profile.cpp.

References ACE_ERROR, TAO_Tagged_Components::encode(), LM_ERROR, TAO_Profile::ref_object_key_, TAO_Profile::tagged_components(), TAO_ENCAP_BYTE_ORDER, ACE_OutputCDR::write_octet(), ACE_OutputCDR::write_string(), and ACE_OutputCDR::write_ushort().

00374 {
00375   encap.write_octet (TAO_ENCAP_BYTE_ORDER);
00376 
00377   // The GIOP version
00378   encap.write_octet (this->version_.major);
00379   encap.write_octet (this->version_.minor);
00380 
00381   // STRING hostname from profile
00382   encap.write_string (this->endpoint_.host ());
00383 
00384   // UNSIGNED SHORT port number
00385   encap.write_ushort (this->endpoint_.port ());
00386 
00387   // OCTET SEQUENCE for object key
00388   if (this->ref_object_key_)
00389     encap << this->ref_object_key_->object_key ();
00390   else
00391     {
00392       ACE_ERROR ((LM_ERROR,
00393                   "(%P|%t) TAO - UIOP_Profile::create_profile_body "
00394                   "no object key marshalled \n"));
00395     }
00396 
00397   if (this->version_.major > 1
00398       || this->version_.minor > 0)
00399     this->tagged_components ().encode (encap);
00400 }

int TAO_SHMIOP_Profile::decode_endpoints ( void   )  [protected, virtual]

Implements TAO_Profile.

Definition at line 458 of file SHMIOP_Profile.cpp.

References ACE_NEW_RETURN, add_endpoint(), endpoint(), endpoint_, TAO_Endpoint::priority(), and TAO_TAG_ENDPOINTS.

00459 {
00460   IOP::TaggedComponent tagged_component;
00461   tagged_component.tag = TAO_TAG_ENDPOINTS;
00462 
00463   if (this->tagged_components_.get_component (tagged_component))
00464     {
00465       const CORBA::Octet *buf =
00466         tagged_component.component_data.get_buffer ();
00467 
00468       TAO_InputCDR in_cdr (reinterpret_cast <const char*> (buf),
00469                            tagged_component.component_data.length ());
00470 
00471       // Extract the Byte Order.
00472       CORBA::Boolean byte_order;
00473       if ((in_cdr >> ACE_InputCDR::to_boolean (byte_order)) == 0)
00474         return -1;
00475       in_cdr.reset_byte_order (static_cast<int> (byte_order));
00476 
00477       // Extract endpoints sequence.
00478       TAO::IIOPEndpointSequence endpoints;
00479 
00480       if ((in_cdr >> endpoints) == 0)
00481         return -1;
00482 
00483       // Get the priority of the first endpoint (head of the list.
00484       // It's other data is extracted as part of the standard profile
00485       // decoding.
00486       this->endpoint_.priority (endpoints[0].priority);
00487 
00488       // Use information extracted from the tagged component to
00489       // populate the profile.  Skip the first endpoint, since it is
00490       // always extracted through standard profile body.  Also, begin
00491       // from the end of the sequence to preserve endpoint order,
00492       // since <add_endpoint> method reverses the order of endpoints
00493       // in the list.
00494       for (CORBA::ULong i = endpoints.length () - 1;
00495            i > 0;
00496            --i)
00497         {
00498           TAO_SHMIOP_Endpoint *endpoint = 0;
00499           ACE_NEW_RETURN (endpoint,
00500                           TAO_SHMIOP_Endpoint (endpoints[i].host,
00501                                                endpoints[i].port,
00502                                                endpoints[i].priority),
00503                           -1);
00504 
00505           this->add_endpoint (endpoint);
00506         }
00507     }
00508 
00509   return 0;
00510 }

int TAO_SHMIOP_Profile::decode_profile ( TAO_InputCDR cdr  )  [protected, virtual]

Template methods. Please see tao/Profile.h for documentation.

Implements TAO_Profile.

Definition at line 103 of file SHMIOP_Profile.cpp.

References ACE_DEBUG, ACE_TEXT, ACE_InputCDR::good_bit(), LM_DEBUG, ACE_InputCDR::read_string(), ACE_InputCDR::read_ushort(), and TAO_debug_level.

00104 {
00105   // Decode host and port into the <endpoint_>.
00106   if (cdr.read_string (this->endpoint_.host_.out ()) == 0
00107       || cdr.read_ushort (this->endpoint_.port_) == 0)
00108     {
00109       if (TAO_debug_level > 0)
00110         {
00111           ACE_DEBUG ((LM_DEBUG,
00112                       ACE_TEXT ("TAO (%P|%t) SHMIOP_Profile::decode - ")
00113                       ACE_TEXT ("error while decoding host/port")));
00114         }
00115       return -1;
00116     }
00117 
00118   if (cdr.good_bit ())
00119     {
00120       // Invalidate the object_addr_ until first access.
00121       this->endpoint_.object_addr_.set_type (-1);
00122 
00123       return 1;
00124     }
00125 
00126   return -1;
00127 }

CORBA::Boolean TAO_SHMIOP_Profile::do_is_equivalent ( const TAO_Profile other_profile  )  [protected, virtual]

Implements TAO_Profile.

Definition at line 267 of file SHMIOP_Profile.cpp.

References endpoint_, and TAO_SHMIOP_Endpoint::next_.

00268 {
00269   const TAO_SHMIOP_Profile *op =
00270     dynamic_cast <const TAO_SHMIOP_Profile *> (other_profile);
00271 
00272   if (op == 0)
00273     return 0;
00274 
00275   // Check endpoints equivalence.
00276   const TAO_SHMIOP_Endpoint *other_endp = &op->endpoint_;
00277   for (TAO_SHMIOP_Endpoint *endp = &this->endpoint_;
00278        endp != 0;
00279        endp = endp->next_)
00280     {
00281       if (endp->is_equivalent (other_endp))
00282         other_endp = other_endp->next_;
00283       else
00284         return 0;
00285     }
00286 
00287   return 1;
00288 }

int TAO_SHMIOP_Profile::encode_endpoints ( void   )  [virtual]

Implements TAO_Profile.

Definition at line 403 of file SHMIOP_Profile.cpp.

References ACE_OutputCDR::begin(), ACE_Message_Block::cont(), count_, endpoint(), endpoint_, ACE_OS::memcpy(), TAO_Endpoint::priority(), TAO_Tagged_Components::set_component(), TAO_Profile::tagged_components_, TAO_ENCAP_BYTE_ORDER, TAO_TAG_ENDPOINTS, and ACE_OutputCDR::total_length().

00404 {
00405   // Create a data structure and fill it with endpoint info for wire
00406   // transfer.
00407   // We include information for the head of the list
00408   // together with other endpoints because even though its addressing
00409   // info is transmitted using standard ProfileBody components, its
00410   // priority is not!
00411   TAO::IIOPEndpointSequence endpoints;
00412   endpoints.length (this->count_);
00413 
00414   TAO_SHMIOP_Endpoint *endpoint = &this->endpoint_;
00415   for (CORBA::ULong i = 0;
00416        i < this->count_;
00417        ++i)
00418     {
00419       endpoints[i].host = endpoint->host ();
00420       endpoints[i].port = endpoint->port ();
00421       endpoints[i].priority = endpoint->priority ();
00422 
00423       endpoint = endpoint->next_;
00424     }
00425 
00426   // Encode the data structure.
00427   TAO_OutputCDR out_cdr;
00428   if ((out_cdr << ACE_OutputCDR::from_boolean (TAO_ENCAP_BYTE_ORDER)
00429        == 0)
00430       || (out_cdr << endpoints) == 0)
00431     return -1;
00432   size_t length = out_cdr.total_length ();
00433 
00434   IOP::TaggedComponent tagged_component;
00435   tagged_component.tag = TAO_TAG_ENDPOINTS;
00436   tagged_component.component_data.length (static_cast <CORBA::ULong>(length));
00437   CORBA::Octet *buf =
00438     tagged_component.component_data.get_buffer ();
00439 
00440   for (const ACE_Message_Block *iterator = out_cdr.begin ();
00441        iterator != 0;
00442        iterator = iterator->cont ())
00443     {
00444       size_t i_length = iterator->length ();
00445       ACE_OS::memcpy (buf, iterator->rd_ptr (), i_length);
00446 
00447       buf += i_length;
00448     }
00449 
00450   // Add component with encoded endpoint data to this profile's
00451   // TaggedComponents.
00452   tagged_components_.set_component (tagged_component);
00453 
00454   return 0;
00455 }

TAO_Endpoint * TAO_SHMIOP_Profile::endpoint ( void   )  [virtual]

Implements TAO_Profile.

Definition at line 87 of file SHMIOP_Profile.cpp.

References endpoint_.

Referenced by TAO_SHMIOP_Acceptor::create_new_profile(), decode_endpoints(), and encode_endpoints().

00088 {
00089   return &this->endpoint_;
00090 }

CORBA::ULong TAO_SHMIOP_Profile::endpoint_count ( void   )  const [virtual]

Implements TAO_Profile.

Definition at line 93 of file SHMIOP_Profile.cpp.

References count_.

00094 {
00095   return this->count_;
00096 }

CORBA::ULong TAO_SHMIOP_Profile::hash ( CORBA::ULong  max  )  [virtual]

Implements TAO_Profile.

Definition at line 291 of file SHMIOP_Profile.cpp.

References TAO_Profile::hash_service_i(), TAO_GIOP_Message_Version::minor, TAO_Profile::ref_object_key_, TAO_Profile::tag(), and TAO_Profile::version_.

00293 {
00294   // Get the hashvalue for all endpoints.
00295   CORBA::ULong hashval = 0;
00296   for (TAO_SHMIOP_Endpoint *endp = &this->endpoint_;
00297        endp != 0;
00298        endp = endp->next_)
00299     {
00300       hashval += endp->hash ();
00301     }
00302 
00303   hashval += this->version_.minor;
00304   hashval += this->tag ();
00305 
00306   const TAO::ObjectKey &ok =
00307     this->ref_object_key_->object_key ();
00308 
00309   if (ok.length () >= 4)
00310     {
00311       hashval += ok[1];
00312       hashval += ok[3];
00313     }
00314 
00315   hashval += this->hash_service_i (max);
00316 
00317   return hashval % max;
00318 }

char TAO_SHMIOP_Profile::object_key_delimiter ( void   )  const [virtual]

Implements TAO_Profile.

Definition at line 28 of file SHMIOP_Profile.cpp.

00029 {
00030   return TAO_SHMIOP_Profile::object_key_delimiter_;
00031 }

void TAO_SHMIOP_Profile::parse_string_i ( const char *  string  )  [protected, virtual]

Implements TAO_Profile.

Definition at line 130 of file SHMIOP_Profile.cpp.

References CORBA::SystemException::_tao_minor_code(), ACE_DEBUG, ACE_TEXT, ACE_OS::atoi(), CORBA::COMPLETED_NO, endpoint_, ACE_INET_Addr::get_host_addr(), ACE_INET_Addr::get_host_name(), ACE_INET_Addr::get_port_number(), TAO_SHMIOP_Endpoint::host_, LM_DEBUG, MAXHOSTNAMELEN, TAO_SHMIOP_Endpoint::port_, ACE_OS::strchr(), ACE_OS::strcmp(), CORBA::string_alloc(), ACE_INET_Addr::string_to_addr(), ACE_OS::strncpy(), ACE_OS::strspn(), TAO_debug_level, and TAO::VMCID.

00132 {
00133   // Pull off the "hostname:port/" part of the objref
00134   // Copy the string because we are going to modify it...
00135   CORBA::String_var copy (string);
00136 
00137   char *start = copy.inout ();
00138   char *cp = ACE_OS::strchr (start, ':');  // Look for a port
00139 
00140   if (cp == 0)
00141     {
00142       // No host/port delimiter!
00143       throw ::CORBA::INV_OBJREF (
00144                    CORBA::SystemException::_tao_minor_code (
00145                      TAO::VMCID,
00146                      EINVAL),
00147                    CORBA::COMPLETED_NO);
00148     }
00149 
00150   char *okd = ACE_OS::strchr (start, this->object_key_delimiter_);
00151 
00152   if (okd == 0)
00153     {
00154       // No object key delimiter!
00155       throw ::CORBA::INV_OBJREF (
00156                    CORBA::SystemException::_tao_minor_code (
00157                      TAO::VMCID,
00158                      EINVAL),
00159                    CORBA::COMPLETED_NO);
00160     }
00161 
00162   // Don't increment the pointer 'cp' directly since we still need
00163   // to use it immediately after this block.
00164 
00165   CORBA::ULong length = okd - (cp + 1);
00166   // Don't allocate space for the colon ':'.
00167 
00168   CORBA::String_var tmp = CORBA::string_alloc (length);
00169 
00170   ACE_OS::strncpy (tmp.inout (), cp + 1, length);
00171   tmp[length] = '\0';
00172 
00173   if (ACE_OS::strspn (tmp.in (), "1234567890") == length)
00174     {
00175       this->endpoint_.port_ =
00176         static_cast <CORBA::UShort> (ACE_OS::atoi (tmp.in ()));
00177     }
00178   else
00179     {
00180       ACE_INET_Addr ia;
00181       if (ia.string_to_addr (tmp.in ()) == -1)
00182         {
00183           throw ::CORBA::INV_OBJREF (
00184               CORBA::SystemException::_tao_minor_code (
00185                   TAO::VMCID,
00186                   EINVAL),
00187               CORBA::COMPLETED_NO);
00188         }
00189       else
00190         {
00191           this->endpoint_.port_ = ia.get_port_number ();
00192         }
00193     }
00194 
00195   length = cp - start;
00196 
00197   tmp = CORBA::string_alloc (length);
00198 
00199   ACE_OS::strncpy (tmp.inout (), start, length);
00200   tmp[length] = '\0';
00201 
00202   this->endpoint_.host_ = tmp._retn ();
00203 
00204   ACE_INET_Addr host_addr;
00205 
00206   if (ACE_OS::strcmp (this->endpoint_.host_.in (), "") == 0)
00207     {
00208       char tmp_host [MAXHOSTNAMELEN + 1];
00209 
00210       // If no host is specified: assign the default host : the local host.
00211       if (host_addr.get_host_name (tmp_host,
00212                                    sizeof (tmp_host)) != 0)
00213       {
00214         const char *tmp = host_addr.get_host_addr ();
00215         if (tmp == 0)
00216           {
00217             if (TAO_debug_level > 0)
00218               ACE_DEBUG ((LM_DEBUG,
00219                           ACE_TEXT ("\n\nTAO (%P|%t) ")
00220                           ACE_TEXT ("SHMIOP_Profile::parse_string ")
00221                           ACE_TEXT ("- %p\n\n"),
00222                           ACE_TEXT ("cannot determine hostname")));
00223 
00224             // @@ What's the right exception to throw here?
00225             throw ::CORBA::INV_OBJREF (
00226                          CORBA::SystemException::_tao_minor_code (
00227                            TAO::VMCID,
00228                            EINVAL),
00229                          CORBA::COMPLETED_NO);
00230           }
00231         else
00232           this->endpoint_.host_ = tmp;
00233       }
00234       else
00235         {
00236           this->endpoint_.host_ = (const char *) tmp_host;
00237         }
00238     }
00239 
00240   if (this->endpoint_.object_addr_.set (this->endpoint_.port_,
00241                                         this->endpoint_.host_.in ()) == -1)
00242     {
00243       if (TAO_debug_level > 0)
00244         {
00245           ACE_DEBUG ((LM_DEBUG,
00246                       ACE_TEXT ("TAO (%P|%t) SHMIOP_Profile::parse_string () - \n")
00247                       ACE_TEXT ("TAO (%P|%t) ACE_INET_Addr::set () failed")));
00248         }
00249 
00250       // @@ What's the right exception to throw here?
00251       throw ::CORBA::INV_OBJREF (
00252                    CORBA::SystemException::_tao_minor_code (
00253                      TAO::VMCID,
00254                      EINVAL),
00255                    CORBA::COMPLETED_NO);
00256     }
00257 
00258   TAO::ObjectKey ok;
00259   TAO::ObjectKey::decode_string_to_sequence (ok,
00260                                              okd + 1);  // increment past the object key separator
00261 
00262   (void) this->orb_core ()->object_key_table ().bind (ok,
00263                                                       this->ref_object_key_);
00264 }

const char * TAO_SHMIOP_Profile::prefix ( void   )  [static]

Return the char string prefix.

Definition at line 367 of file SHMIOP_Profile.cpp.

References prefix_.

00368 {
00369   return ::prefix_;
00370 }

char * TAO_SHMIOP_Profile::to_string ( void   )  [virtual]

Template methods, please see Profile.h for documentation.

Implements TAO_Profile.

Definition at line 330 of file SHMIOP_Profile.cpp.

References endpoint_, object_key_delimiter_, TAO_SHMIOP_Endpoint::port(), TAO_Profile::ref_object_key_, ACE_OS::sprintf(), CORBA::string_alloc(), and ACE_OS::strlen().

00331 {
00332   CORBA::String_var key;
00333   TAO::ObjectKey::encode_sequence_to_string (key.inout(),
00334                                              this->ref_object_key_->object_key ());
00335 
00336   size_t buflen = (8 /* corbaloc */ +
00337                    1 /* colon separator */ +
00338                    ACE_OS::strlen (::prefix_) +
00339                    1 /* colon separator */ +
00340                    1 /* major version */ +
00341                    1 /* decimal point */ +
00342                    1 /* minor version */ +
00343                    1 /* `@' character */ +
00344                    ACE_OS::strlen (this->endpoint_.host ()) +
00345                    1 /* colon separator */ +
00346                    5 /* port number */ +
00347                    1 /* object key separator */ +
00348                    ACE_OS::strlen (key.in ()));
00349 
00350   char * buf = CORBA::string_alloc (static_cast <CORBA::ULong> (buflen));
00351 
00352   static const char digits [] = "0123456789";
00353 
00354   ACE_OS::sprintf (buf,
00355                    "corbaloc:%s:%c.%c@%s:%d%c%s",
00356                    ::prefix_,
00357                    digits [this->version_.major],
00358                    digits [this->version_.minor],
00359                    this->endpoint_.host (),
00360                    this->endpoint_.port (),
00361                    this->object_key_delimiter_,
00362                    key.in ());
00363   return buf;
00364 }


Member Data Documentation

CORBA::ULong TAO_SHMIOP_Profile::count_ [private]

Number of endpoints in the list headed by <endpoint_>.

Definition at line 122 of file SHMIOP_Profile.h.

Referenced by add_endpoint(), encode_endpoints(), and endpoint_count().

TAO_SHMIOP_Endpoint TAO_SHMIOP_Profile::endpoint_ [private]

Head of this profile's list of endpoints. This endpoint is not dynamically allocated because a profile always contains at least one endpoint.

Currently, a profile contains more than one endpoint, i.e., list contains more than just the head, only when RTCORBA is enabled. However, in the near future, this will be used in nonRT mode as well, e.g., to support TAG_ALTERNATE_IIOP_ADDRESS-style feature. Addressing info of the default endpoint, i.e., head of the list, is transmitted using standard SHMIOP ProfileBody components. See <encode_endpoints> method documentation above for how the rest of the endpoint list is transmitted.

Definition at line 119 of file SHMIOP_Profile.h.

Referenced by add_endpoint(), decode_endpoints(), do_is_equivalent(), encode_endpoints(), endpoint(), parse_string_i(), and to_string().

TAO_BEGIN_VERSIONED_NAMESPACE_DECL const char TAO_SHMIOP_Profile::object_key_delimiter_ = '/' [static]

The object key delimiter that SHMIOP uses or expects.

Definition at line 49 of file SHMIOP_Profile.h.

Referenced by TAO_SHMIOP_Connector::object_key_delimiter(), and to_string().


The documentation for this class was generated from the following files:
Generated on Tue Feb 2 17:47:34 2010 for TAO_Strategies by  doxygen 1.4.7