TAO_Tagged_Profile Class Reference

This class is used to manipulate and access the target address field of a GIOP 1.2 request. More...

#include <Tagged_Profile.h>

Collaboration diagram for TAO_Tagged_Profile:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 TAO_Tagged_Profile (TAO_ORB_Core *orb_core)
 Ctor.

CORBA::Boolean unmarshall_target_address (TAO_InputCDR &cdr)
 Unmarshall the GIOP 1.2 target address field.

CORBA::Boolean unmarshall_object_key (TAO_InputCDR &cdr)
 Unmarshals the received object key for GIOP 1.0/1.1.

TAO::ObjectKeyobject_key (void)
 Return the object key.

void object_key (TAO::ObjectKey &object_key)
 Save the object key.

const TAO::ObjectKeyobject_key (void) const
 Return a const object key.

const IOP::TaggedProfiletagged_profile (void) const
 get the tagged_profile

CORBA::ULong profile_index (void) const
const ACE_CStringtype_id (void) const
CORBA::Short discriminator (void) const

Private Member Functions

CORBA::Boolean extract_object_key (IOP::TaggedProfile &profile)
CORBA::Boolean unmarshall_object_key_i (TAO_InputCDR &cdr)
 Unmarshals the received object key.

CORBA::Boolean unmarshall_iop_profile_i (TAO_InputCDR &cdr)
 Unmarshall the IOP::TaggedProfile.

CORBA::Boolean unmarshall_ref_addr_i (TAO_InputCDR &cdr)
 Unmarshalls the GIOP::IORAddressingInfo.


Private Attributes

TAO_ORB_Coreorb_core_
 Our ORB Core.

CORBA::Short discriminator_
 Keep track of which kind of target profile that was extracted.

CORBA::Boolean object_key_extracted_
 Flag to denote whether the object key has been extracted yet.

TAO::ObjectKey object_key_
 The object key.

IOP::TaggedProfile profile_
 The Tagged profile. This class would have the Tagged Profile.

CORBA::ULong profile_index_
ACE_CString type_id_

Friends

class TAO::CSD::FW_Server_Request_Wrapper

Detailed Description

This class is used to manipulate and access the target address field of a GIOP 1.2 request.

Definition at line 45 of file Tagged_Profile.h.


Constructor & Destructor Documentation

TAO_BEGIN_VERSIONED_NAMESPACE_DECL ACE_INLINE TAO_Tagged_Profile::TAO_Tagged_Profile TAO_ORB_Core orb_core  ) 
 

Ctor.

Definition at line 8 of file Tagged_Profile.i.

00009   : orb_core_ (orb_core),
00010     discriminator_ (0),
00011     object_key_ (),
00012     profile_ (),
00013     profile_index_ (0),
00014     type_id_ ()
00015 {
00016 
00017 }


Member Function Documentation

ACE_INLINE CORBA::Short TAO_Tagged_Profile::discriminator void   )  const
 

Definition at line 62 of file Tagged_Profile.i.

References discriminator_.

00063 {
00064   return this->discriminator_;
00065 }

TAO_BEGIN_VERSIONED_NAMESPACE_DECL CORBA::Boolean TAO_Tagged_Profile::extract_object_key IOP::TaggedProfile profile  )  [private]
 

Extract the object key from the TaggedProfile and store it in

Definition at line 23 of file Tagged_Profile.cpp.

References TAO_Thread_Lane_Resources::acceptor_registry(), ACE_ERROR, ACE_TEXT, TAO_Acceptor_Registry::get_acceptor(), TAO_ORB_Core::lane_resources(), LM_ERROR, TAO_Acceptor::object_key(), IOP::TaggedProfile::tag, and TAO_debug_level.

Referenced by object_key().

00024 {
00025   // Get our Acceptor registry
00026   TAO_Acceptor_Registry &acceptor_registry =
00027     this->orb_core_->lane_resources ().acceptor_registry ();
00028 
00029   // Get the right acceptor for the tag in the TaggedProfile
00030   TAO_Acceptor *acceptor =
00031     acceptor_registry.get_acceptor (profile.tag);
00032 
00033   if (acceptor)
00034     {
00035       // Get the object key
00036       int retval =
00037         acceptor->object_key (profile,
00038                               this->object_key_);
00039       if (retval == -1)
00040         {
00041           return 0;
00042         }
00043     }
00044   else
00045     {
00046       if (TAO_debug_level)
00047         {
00048           ACE_ERROR ((LM_ERROR,
00049                       ACE_TEXT ("(%P|%t)TAO_Tagged_Profile \n")));
00050         }
00051 
00052       return 0;
00053     }
00054 
00055   return 1;
00056 }

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

Return a const object key.

Definition at line 38 of file Tagged_Profile.i.

00039 {
00040   return const_cast<TAO_Tagged_Profile *> (this)->object_key ();
00041 }

ACE_INLINE void TAO_Tagged_Profile::object_key TAO::ObjectKey object_key  ) 
 

Save the object key.

Definition at line 29 of file Tagged_Profile.i.

References TAO::unbounded_value_sequence< T >::get_buffer(), TAO::unbounded_value_sequence< T >::length(), object_key_extracted_, and TAO::unbounded_value_sequence< T >::replace().

00030 {
00031   this->object_key_.replace (object_key.length (),
00032                              object_key.length (),
00033                              object_key.get_buffer ());
00034   this->object_key_extracted_ = 1;
00035 }

ACE_INLINE TAO::ObjectKey & TAO_Tagged_Profile::object_key void   ) 
 

Return the object key.

Definition at line 20 of file Tagged_Profile.i.

References extract_object_key(), and object_key_extracted_.

Referenced by TAO_ServerRequest::object_key(), TAO_GIOP_Locate_Request_Header::object_key(), and TAO_ServerRequest::TAO_ServerRequest().

00021 {
00022   if (this->object_key_extracted_ == 0)
00023     this->object_key_extracted_ = this->extract_object_key (this->profile_);
00024 
00025   return this->object_key_;
00026 }

ACE_INLINE CORBA::ULong TAO_Tagged_Profile::profile_index void   )  const
 

Get the profile index, that needs to be used in the sequnce of TaggedProfiles contained IOP::IOR that is receivedfrom the client.

Definition at line 50 of file Tagged_Profile.i.

References profile_index_.

00051 {
00052   return this->profile_index_;
00053 }

ACE_INLINE const IOP::TaggedProfile & TAO_Tagged_Profile::tagged_profile void   )  const
 

get the tagged_profile

Definition at line 44 of file Tagged_Profile.i.

00045 {
00046   return this->profile_;
00047 }

ACE_INLINE const ACE_CString & TAO_Tagged_Profile::type_id void   )  const
 

Accessor to the type_id contained in the IOP::IOR received from the client.

Definition at line 56 of file Tagged_Profile.i.

References type_id_.

00057 {
00058   return this->type_id_;
00059 }

CORBA::Boolean TAO_Tagged_Profile::unmarshall_iop_profile_i TAO_InputCDR cdr  )  [private]
 

Unmarshall the IOP::TaggedProfile.

Definition at line 124 of file Tagged_Profile.cpp.

References ACE_InputCDR::good_bit().

Referenced by unmarshall_target_address().

00126 {
00127   CORBA::Boolean hdr_status =
00128     (CORBA::Boolean) input.good_bit ();
00129 
00130   // Extract into the IOP::Tagged profile.
00131   hdr_status &= input >> this->profile_;
00132 
00133   return hdr_status;
00134 }

CORBA::Boolean TAO_Tagged_Profile::unmarshall_object_key TAO_InputCDR cdr  ) 
 

Unmarshals the received object key for GIOP 1.0/1.1.

Definition at line 89 of file Tagged_Profile.cpp.

References discriminator_, and unmarshall_object_key_i().

Referenced by TAO_GIOP_Message_Generator_Parser_10::parse_locate_header(), and TAO_GIOP_Message_Generator_Parser_10::parse_request_header().

00091 {
00092   this->discriminator_ = TAO_Target_Specification::Key_Addr;
00093 
00094   return this->unmarshall_object_key_i (input);
00095 }

CORBA::Boolean TAO_Tagged_Profile::unmarshall_object_key_i TAO_InputCDR cdr  )  [private]
 

Unmarshals the received object key.

Definition at line 99 of file Tagged_Profile.cpp.

References ACE_InputCDR::good_bit(), object_key_extracted_, ACE_InputCDR::rd_ptr(), ACE_InputCDR::read_long(), TAO::unbounded_value_sequence< T >::replace(), and ACE_InputCDR::skip_bytes().

Referenced by unmarshall_object_key(), and unmarshall_target_address().

00101 {
00102   CORBA::Boolean hdr_status =
00103     (CORBA::Boolean) input.good_bit ();
00104 
00105   CORBA::Long key_length = 0;
00106   hdr_status = hdr_status && input.read_long (key_length);
00107 
00108   if (hdr_status)
00109     {
00110       this->object_key_.replace (key_length,
00111                                  key_length,
00112                                  (CORBA::Octet*)input.rd_ptr (),
00113                                  0);
00114       input.skip_bytes (key_length);
00115 
00116       this->object_key_extracted_ = 1;
00117     }
00118 
00119   return hdr_status;
00120 }

CORBA::Boolean TAO_Tagged_Profile::unmarshall_ref_addr_i TAO_InputCDR cdr  )  [private]
 

Unmarshalls the GIOP::IORAddressingInfo.

Definition at line 137 of file Tagged_Profile.cpp.

References ACE_InputCDR::good_bit(), profile_index_, ACE_InputCDR::rd_ptr(), ACE_InputCDR::read_long(), ACE_InputCDR::read_ulong(), ACE_InputCDR::skip_bytes(), and type_id_.

Referenced by unmarshall_target_address().

00139 {
00140   CORBA::Boolean hdr_status =
00141     (CORBA::Boolean) input.good_bit ();
00142 
00143   /*
00144    * The GIOP::IORAddressingInfo is defined as follows
00145    *   struct IORAddressingInfo
00146    *     {
00147    *       unsigned long selected_profile_index;
00148    *       IOP::IOR ior;
00149    *     };
00150    *
00151    * and the IOP::IOR is defined to be
00152    *   struct IOR
00153    *      {
00154    *        string type_id;
00155    *        sequence<TaggedProfile>   profiles;
00156    *      };
00157    */
00158 
00159   // First read the profile index
00160   CORBA::ULong prof_index =  0;
00161 
00162   hdr_status =
00163     hdr_status && input.read_ulong (prof_index);
00164 
00165   // Set the value in TAO_Tagged_Profile
00166   if (hdr_status)
00167     {
00168       this->profile_index_ = prof_index;
00169     }
00170 
00171   // Get the length of the type_id
00172   CORBA::Long id_length = 0;
00173   hdr_status = hdr_status && input.read_long (id_length);
00174 
00175   if (hdr_status)
00176     {
00177       // Set the type_id
00178       this->type_id_.set (input.rd_ptr (),
00179                           0);
00180 
00181       input.skip_bytes (id_length);
00182     }
00183 
00184   // Unmarshall the sequnce of TaggedProfiles
00185   IOP::TaggedProfileSeq ior_profiles;
00186 
00187   hdr_status &= input >> ior_profiles;
00188 
00189   // Get the right TaggedProfile from the <ior_profiles>
00190   if (hdr_status)
00191     {
00192       this->profile_ = ior_profiles [prof_index];
00193     }
00194 
00195   return hdr_status;
00196 }

CORBA::Boolean TAO_Tagged_Profile::unmarshall_target_address TAO_InputCDR cdr  ) 
 

Unmarshall the GIOP 1.2 target address field.

Definition at line 59 of file Tagged_Profile.cpp.

References discriminator_, ACE_InputCDR::read_short(), unmarshall_iop_profile_i(), unmarshall_object_key_i(), and unmarshall_ref_addr_i().

Referenced by TAO_GIOP_Message_Generator_Parser_12::parse_locate_header(), and TAO_GIOP_Message_Generator_Parser_12::parse_request_header().

00060 {
00061   CORBA::Boolean hdr_status = cdr.read_short (this->discriminator_);
00062 
00063   if (hdr_status)
00064     {
00065       switch (this->discriminator_)
00066         {
00067         case TAO_Target_Specification::Key_Addr:
00068           hdr_status = this->unmarshall_object_key_i (cdr);
00069           break;
00070 
00071         case TAO_Target_Specification::Profile_Addr:
00072           hdr_status = this->unmarshall_iop_profile_i (cdr);
00073           break;
00074 
00075         case TAO_Target_Specification::Reference_Addr:
00076           hdr_status = this->unmarshall_ref_addr_i (cdr);
00077           break;
00078 
00079         default:
00080           hdr_status = 0;
00081           break;
00082         }
00083     }
00084 
00085   return hdr_status;
00086 }


Friends And Related Function Documentation

friend class TAO::CSD::FW_Server_Request_Wrapper [friend]
 

Declare FW_Server_Request_Wrapper a friend This friendship makes the FW_Server_Request_Wrapper be able to clone the TAO_Tagged_Profile data member in TAO_ServerRequest.

Definition at line 52 of file Tagged_Profile.h.


Member Data Documentation

CORBA::Short TAO_Tagged_Profile::discriminator_ [private]
 

Keep track of which kind of target profile that was extracted.

Definition at line 105 of file Tagged_Profile.h.

Referenced by discriminator(), unmarshall_object_key(), and unmarshall_target_address().

TAO::ObjectKey TAO_Tagged_Profile::object_key_ [private]
 

The object key.

Definition at line 111 of file Tagged_Profile.h.

CORBA::Boolean TAO_Tagged_Profile::object_key_extracted_ [private]
 

Flag to denote whether the object key has been extracted yet.

Definition at line 108 of file Tagged_Profile.h.

Referenced by object_key(), and unmarshall_object_key_i().

TAO_ORB_Core* TAO_Tagged_Profile::orb_core_ [private]
 

Our ORB Core.

Definition at line 102 of file Tagged_Profile.h.

IOP::TaggedProfile TAO_Tagged_Profile::profile_ [private]
 

The Tagged profile. This class would have the Tagged Profile.

Definition at line 114 of file Tagged_Profile.h.

CORBA::ULong TAO_Tagged_Profile::profile_index_ [private]
 

The profile index incase we receive a GIOP::IORAddressingInfo information

Definition at line 140 of file Tagged_Profile.h.

Referenced by profile_index(), and unmarshall_ref_addr_i().

ACE_CString TAO_Tagged_Profile::type_id_ [private]
 

The type_id in the IOP::IOR in case we receive the GIOP::IORAddressingInfo information.

Definition at line 144 of file Tagged_Profile.h.

Referenced by type_id(), and unmarshall_ref_addr_i().


The documentation for this class was generated from the following files:
Generated on Thu Nov 9 12:23:52 2006 for TAO by doxygen 1.3.6