diff options
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_Profile.h')
-rw-r--r-- | TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_Profile.h | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_Profile.h b/TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_Profile.h new file mode 100644 index 00000000000..fef84fbd685 --- /dev/null +++ b/TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_Profile.h @@ -0,0 +1,178 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file SSLIOP_Profile.h + * + * $Id$ + * + * SSLIOP profile specific processing + * + * @author Carlos O'Ryan <coryan@uci.edu> + * @author Ossama Othman <ossama@uci.edu> + */ +//============================================================================= + + +#ifndef TAO_SSLIOP_PROFILE_H +#define TAO_SSLIOP_PROFILE_H + +#include /**/ "ace/pre.h" + +#include "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "orbsvcs/SSLIOP/SSLIOP_Endpoint.h" +#include "tao/IIOP_Profile.h" + +TAO_BEGIN_VERSIONED_NAMESPACE_DECL + +// namespace TAO +// { +// namespace SSLIOP +// { + + /** + * @class Profile + * + * @brief This class defines the protocol specific attributes + * required for locating ORBs over a TCP/IP network, using + * either IIOP or IIOP/SSL for communication. + * + * This class extends TAO_IIOP_Profile to support secure + * communication using SSL. + */ + class TAO_SSLIOP_Profile : public TAO_IIOP_Profile + { + public: + /// Profile constructor, same as above except the object_key has + /// already been marshaled. + TAO_SSLIOP_Profile (const ACE_INET_Addr & addr, + const TAO::ObjectKey & object_key, + const TAO_GIOP_Message_Version & version, + TAO_ORB_Core * orb_core, + const ::SSLIOP::SSL * ssl_component); + + /// Profile constructor, this is the most efficient since it + /// doesn't require any address resolution processing. + TAO_SSLIOP_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, + const ::SSLIOP::SSL * ssl_component); + + /// Create profile with the given SSLIOP tagged component. + TAO_SSLIOP_Profile (TAO_ORB_Core * orb_core, + const ::SSLIOP::SSL * ssl_component); + + /// Profile constructor. ssl_only != 0 will force secure + /// connections, pnly. + TAO_SSLIOP_Profile (TAO_ORB_Core * orb_core, int ssl_only = 0); + + + // = Please see Profile.h for the documentation of these methods. + virtual int decode (TAO_InputCDR& cdr); + virtual int encode_endpoints (void); + virtual TAO_Endpoint *endpoint (void); + + /** + * Override parse_string() from the base class to update the SSL + * endpoint's iiop endpoint once the base class has completed + * parsing the string. + *@par + * Initialize this object using the given input string. + * URL-style string contain only one endpoint. + */ + virtual void parse_string (const char * string); + + /** + * Add @a endp to this profile's list of endpoints (it is + * inserted next to the head of the list). This profiles takes + * ownership of @a endp. If @a endp's @c iiop_endpoint_ member + * is not 0, it is added to our parent's class endpoint list. + */ + void add_endpoint (TAO_SSLIOP_Endpoint * endp); + + protected: + + /// Destructor. + /** + * Protected destructor to enforce proper memory management + * through the reference counting mechanism. + */ + ~TAO_SSLIOP_Profile (void); + + /// Profile equivalence template method. + /** + * @see TAO_Profile::do_is_equivalent() + */ + virtual CORBA::Boolean do_is_equivalent ( + const TAO_Profile * other_profile); + + private: + + /** + * Helper for @c decode. Decodes TAO_TAG_SSL_ENDPOINTS from a + * tagged component. Decode only if RTCORBA is enabled. + * + * @return 0 on success and -1 on failure. + * + * @note This should be enabled only when RTCORBA is enabled, + * but sadly others pay the price (of footprint) under + * normal operations. + */ + int decode_tagged_endpoints (void); + + /** + * Head of this profile's list of endpoints. This endpoint is + * not dynamically allocated because a profile always contains + * at least one endpoint. + * @par + * 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 + * non-RT mode as well, e.g., to support @c + * TAG_ALTERNATE_IIOP_ADDRESS feature. + * @par + * Since SSLIOP profile is an extension of IIOP profile, its + * addressing info is contained in two places: IIOP parent + * class contains all iiop addressing while this class contains + * SSL-specific addressing additions to iiop. This means that + * there are two lists of endpoints: one maintained in the + * parent class and one maintained here. Each ssl endpoint + * maintains a pointer to its counterpart in the parent class + * endpoint list. + * @par + * For transmission of IIOP addressing information, see + * @c TAO_IIOP_Profile. Addressing info of the default SSL + * endpoint, i.e., head of the list, is transmitted using + * standard SSLIOP::TAG_SSL_SEC_TRANS tagged component. See + * @c encode_endpoints method documentation above for how the + * rest of the SSL endpoint list is transmitted. + */ + TAO_SSLIOP_Endpoint ssl_endpoint_; + + /** + * Allways treat this endpoint as secure, even if the constructor + * did not explicitely specify a tagged component for SSL. + * @par + * Most likely the parse_string() will supply a subset of the + * attributes - port number, for instance. + */ + int ssl_only_; + + }; + +// } // End SSLIOP namespace. +// } // End TAO namespace. + +TAO_END_VERSIONED_NAMESPACE_DECL + +#include /**/ "ace/post.h" + +#endif /* TAO_SSLIOP_PROFILE_H */ |