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::ObjectKey & object_key (void)
 Return the object key.
void object_key (TAO::ObjectKey &object_key)
 Save the object key.
const TAO::ObjectKey & object_key (void) const
 Return a const object key.
const IOP::TaggedProfile & tagged_profile (void) const
 get the tagged_profile
CORBA::ULong profile_index (void) const
const char * type_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_
const char * 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.inl.

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


Member Function Documentation

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

Definition at line 63 of file Tagged_Profile.inl.

References discriminator_.

00064 {
00065   return this->discriminator_;
00066 }

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 <object_key_>

Definition at line 23 of file Tagged_Profile.cpp.

References ACE_ERROR, ACE_TEXT, TAO_Acceptor_Registry::get_acceptor(), LM_ERROR, TAO_Acceptor::object_key(), 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 = acceptor_registry.get_acceptor (profile.tag);
00031 
00032   if (acceptor)
00033     {
00034       // Get the object key
00035       if (acceptor->object_key (profile, this->object_key_) == -1)
00036         {
00037           return false;
00038         }
00039     }
00040   else
00041     {
00042       if (TAO_debug_level)
00043         {
00044           ACE_ERROR ((LM_ERROR,
00045                       ACE_TEXT ("(%P|%t)TAO_Tagged_Profile \n")));
00046         }
00047 
00048       return false;
00049     }
00050 
00051   return true;
00052 }

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

Return a const object key.

Definition at line 39 of file Tagged_Profile.inl.

References object_key().

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

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

Save the object key.

Definition at line 30 of file Tagged_Profile.inl.

References object_key_, and object_key_extracted_.

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

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

Return the object key.

Definition at line 21 of file Tagged_Profile.inl.

References extract_object_key(), object_key_, and object_key_extracted_.

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

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

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 received from the client.

Definition at line 51 of file Tagged_Profile.inl.

References profile_index_.

00052 {
00053   return this->profile_index_;
00054 }

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

get the tagged_profile

Definition at line 45 of file Tagged_Profile.inl.

References profile_.

00046 {
00047   return this->profile_;
00048 }

ACE_INLINE const char * TAO_Tagged_Profile::type_id ( void   )  const

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

Definition at line 57 of file Tagged_Profile.inl.

References type_id_.

00058 {
00059   return this->type_id_ == 0 ? "" : this->type_id_;
00060 }

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

Unmarshall the IOP::TaggedProfile.

Definition at line 117 of file Tagged_Profile.cpp.

References ACE_InputCDR::good_bit(), and profile_.

Referenced by unmarshall_target_address().

00118 {
00119   CORBA::Boolean hdr_status = (CORBA::Boolean) input.good_bit ();
00120 
00121   // Extract into the IOP::Tagged profile.
00122   hdr_status &= input >> this->profile_;
00123 
00124   return hdr_status;
00125 }

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 85 of file Tagged_Profile.cpp.

References discriminator_, TAO_Target_Specification::Key_Addr, 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().

00086 {
00087   this->discriminator_ = TAO_Target_Specification::Key_Addr;
00088 
00089   return this->unmarshall_object_key_i (input);
00090 }

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

Unmarshals the received object key.

Definition at line 94 of file Tagged_Profile.cpp.

References ACE_InputCDR::good_bit(), object_key_, object_key_extracted_, ACE_InputCDR::rd_ptr(), ACE_InputCDR::read_long(), and ACE_InputCDR::skip_bytes().

Referenced by unmarshall_object_key(), and unmarshall_target_address().

00095 {
00096   CORBA::Boolean hdr_status = (CORBA::Boolean) input.good_bit ();
00097 
00098   CORBA::Long key_length = 0;
00099   hdr_status = hdr_status && input.read_long (key_length);
00100 
00101   if (hdr_status)
00102     {
00103       this->object_key_.replace (key_length,
00104                                  key_length,
00105                                  (CORBA::Octet*)input.rd_ptr (),
00106                                  0);
00107       input.skip_bytes (key_length);
00108 
00109       this->object_key_extracted_ = true;
00110     }
00111 
00112   return hdr_status;
00113 }

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

Unmarshalls the GIOP::IORAddressingInfo.

Definition at line 128 of file Tagged_Profile.cpp.

References ACE_InputCDR::good_bit(), profile_, 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().

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

CORBA::Boolean TAO_Tagged_Profile::unmarshall_target_address ( TAO_InputCDR cdr  ) 

Unmarshall the GIOP 1.2 target address field.

Definition at line 55 of file Tagged_Profile.cpp.

References TAO_Target_Specification::Key_Addr, TAO_Target_Specification::Profile_Addr, ACE_InputCDR::read_short(), TAO_Target_Specification::Reference_Addr, 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().

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


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(), and unmarshall_object_key().

TAO::ObjectKey TAO_Tagged_Profile::object_key_ [private]

The object key.

Definition at line 111 of file Tagged_Profile.h.

Referenced by object_key(), and unmarshall_object_key_i().

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.

Referenced by tagged_profile(), unmarshall_iop_profile_i(), and unmarshall_ref_addr_i().

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().

const char* 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 Tue Feb 2 17:39:47 2010 for TAO by  doxygen 1.4.7