summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_Current.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_Current.cpp')
-rw-r--r--TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_Current.cpp186
1 files changed, 186 insertions, 0 deletions
diff --git a/TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_Current.cpp b/TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_Current.cpp
new file mode 100644
index 00000000000..ad852d19eff
--- /dev/null
+++ b/TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_Current.cpp
@@ -0,0 +1,186 @@
+#include "orbsvcs/SSLIOP/SSLIOP_Current.h"
+#include "tao/debug.h"
+
+
+ACE_RCSID (SSLIOP,
+ SSLIOP_Current,
+ "$Id$")
+
+
+#if !defined (__ACE_INLINE__)
+# include "orbsvcs/SSLIOP/SSLIOP_Current.inl"
+#endif /* __ACE_INLINE__ */
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+TAO::SSLIOP::Current::Current (TAO_ORB_Core *orb_core)
+ : tss_slot_ (0),
+ orb_core_ (orb_core)
+{
+}
+
+TAO::SSLIOP::Current::~Current (void)
+{
+}
+
+::SSLIOP::ASN_1_Cert *
+TAO::SSLIOP::Current::get_peer_certificate ()
+{
+ TAO::SSLIOP::Current_Impl *impl = this->implementation ();
+
+ // If the implementation pointer returned from TSS is zero, then
+ // we're not in the middle of a request or an upcall. Throw an
+ // exception to indicate that.
+ if (impl == 0)
+ throw ::SSLIOP::Current::NoContext ();
+
+ // A valid value must always be returned, so instantiate a sequence
+ // regardless of whether or not it is populated with certificates.
+ ::SSLIOP::ASN_1_Cert *c = 0;
+ ACE_NEW_THROW_EX (c,
+ ::SSLIOP::ASN_1_Cert,
+ CORBA::NO_MEMORY (
+ CORBA::SystemException::_tao_minor_code (
+ TAO::VMCID,
+ ENOMEM),
+ CORBA::COMPLETED_NO));
+
+ ::SSLIOP::ASN_1_Cert_var certificate = c;
+
+ // Populate the sequence with the DER encoded certificate.
+ impl->get_peer_certificate (c);
+
+ return certificate._retn ();
+}
+
+SSLIOP::SSL_Cert *
+TAO::SSLIOP::Current::get_peer_certificate_chain ()
+{
+ TAO::SSLIOP::Current_Impl *impl = this->implementation ();
+
+ // If the implementation pointer returned from TSS is zero, then
+ // we're not in the middle of a request or an upcall. Throw an
+ // exception to indicate that.
+ if (impl == 0)
+ throw SSLIOP::Current::NoContext ();
+
+ // A valid value must always be returned, so instantiate a sequence
+ // regardless of whether or not it is populated with certificates.
+ ::SSLIOP::SSL_Cert *c = 0;
+ ACE_NEW_THROW_EX (c,
+ ::SSLIOP::SSL_Cert,
+ CORBA::NO_MEMORY (
+ CORBA::SystemException::_tao_minor_code (
+ TAO::VMCID,
+ ENOMEM),
+ CORBA::COMPLETED_NO));
+
+ ::SSLIOP::SSL_Cert_var cert_chain = c;
+
+ // Populate the sequence with the chain of DER encoded certificates.
+ impl->get_peer_certificate_chain (c);
+
+ return cert_chain._retn ();
+}
+
+CORBA::Boolean
+TAO::SSLIOP::Current::no_context (void)
+{
+ return (this->implementation () == 0 ? 1 : 0);
+}
+
+void
+TAO::SSLIOP::Current::setup (TAO::SSLIOP::Current_Impl *&prev_impl,
+ TAO::SSLIOP::Current_Impl *new_impl,
+ bool &setup_done)
+{
+ // Set the current context and remember the old one.
+
+ prev_impl = this->implementation ();
+
+ (void) this->implementation (new_impl); // Check for error?
+
+ // Setup is complete.
+ setup_done = true;
+}
+
+void
+TAO::SSLIOP::Current::teardown (TAO::SSLIOP::Current_Impl *prev_impl,
+ bool &setup_done)
+{
+ if (setup_done)
+ {
+ // Reset the old context.
+ (void) this->implementation (prev_impl);
+ setup_done = false;
+ }
+}
+
+TAO::SSLIOP::Current_ptr
+TAO::SSLIOP::Current::_narrow (
+ CORBA::Object_ptr obj)
+{
+ return TAO::SSLIOP::Current::_duplicate (
+ dynamic_cast<TAO::SSLIOP::Current *> (obj));
+}
+
+TAO::SSLIOP::Current_ptr
+TAO::SSLIOP::Current::_duplicate (TAO::SSLIOP::Current_ptr obj)
+{
+ if (!CORBA::is_nil (obj))
+ obj->_add_ref ();
+
+ return obj;
+}
+
+const char *
+TAO::SSLIOP::Current::_interface_repository_id (void) const
+{
+ return "IDL:TAO/SSLIOP/Current:1.0";
+}
+
+// ----------------------------------------------------------------
+
+TAO::SSLIOP::Current_ptr
+tao_TAO_SSLIOP_Current_duplicate (
+ TAO::SSLIOP::Current_ptr p
+ )
+{
+ return TAO::SSLIOP::Current::_duplicate (p);
+}
+
+void
+tao_TAO_SSLIOP_Current_release (
+ TAO::SSLIOP::Current_ptr p
+ )
+{
+ CORBA::release (p);
+}
+
+TAO::SSLIOP::Current_ptr
+tao_TAO_SSLIOP_Current_nil (
+ void
+ )
+{
+ return TAO::SSLIOP::Current::_nil ();
+}
+
+TAO::SSLIOP::Current_ptr
+tao_TAO_SSLIOP_Current_narrow (
+ CORBA::Object *p
+ )
+{
+ return TAO::SSLIOP::Current::_narrow (p);
+}
+
+CORBA::Object *
+tao_TAO_SSLIOP_Current_upcast (
+ void *src
+ )
+{
+ TAO::SSLIOP::Current **tmp =
+ static_cast<TAO::SSLIOP::Current **> (src);
+ return *tmp;
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL