summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_OpenSSL_st_T.inl
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_OpenSSL_st_T.inl')
-rw-r--r--TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_OpenSSL_st_T.inl165
1 files changed, 165 insertions, 0 deletions
diff --git a/TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_OpenSSL_st_T.inl b/TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_OpenSSL_st_T.inl
new file mode 100644
index 00000000000..0233a73fc01
--- /dev/null
+++ b/TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_OpenSSL_st_T.inl
@@ -0,0 +1,165 @@
+// -*- C++ -*-
+//
+// $Id$
+
+
+#include <openssl/crypto.h>
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+template <typename T> ACE_INLINE T *
+TAO::SSLIOP::_duplicate (T * st)
+{
+ // Shallow copy.
+
+ // OpenSSL provides no structure-specific functions to increase the
+ // reference count on the structure it defines, so we do it
+ // manually.
+ if (st != 0)
+ CRYPTO_add (&(st->references),
+ 1,
+ TAO::SSLIOP::OpenSSL_traits<T>::LOCK_ID);
+
+ return st;
+}
+
+template <typename T> ACE_INLINE T *
+TAO::SSLIOP::copy (T const & st)
+{
+ // Deep copy.
+ return TAO::SSLIOP::OpenSSL_traits<T>::copy (st);
+}
+
+template <typename T> ACE_INLINE void
+TAO::SSLIOP::release (T * st)
+{
+ TAO::SSLIOP::OpenSSL_traits<T>::release (st);
+}
+
+// -------------------------------------------------------------------
+
+template <typename T> ACE_INLINE
+TAO::SSLIOP::OpenSSL_st_var<T>::OpenSSL_st_var (void)
+ : st_ (0)
+{
+}
+
+template <typename T> ACE_INLINE
+TAO::SSLIOP::OpenSSL_st_var<T>::OpenSSL_st_var (T * st)
+ : st_ (st)
+{
+}
+
+template <typename T> ACE_INLINE
+TAO::SSLIOP::OpenSSL_st_var<T>::OpenSSL_st_var (
+ TAO::SSLIOP::OpenSSL_st_var<T> const & st)
+ : st_ (TAO::SSLIOP::OpenSSL_traits<T>::_duplicate (st.ptr ()))
+{
+}
+
+template <typename T> ACE_INLINE
+TAO::SSLIOP::OpenSSL_st_var<T>::OpenSSL_st_var (T const & st)
+ : st_ (TAO::SSLIOP::OpenSSL_traits<T>::copy (st))
+{
+}
+
+template <typename T> ACE_INLINE
+TAO::SSLIOP::OpenSSL_st_var<T>::~OpenSSL_st_var (void)
+{
+ TAO::SSLIOP::OpenSSL_traits<T>::release (this->st_);
+ // TAO::SSLIOP::release (this->st_);
+}
+
+template <typename T> ACE_INLINE TAO::SSLIOP::OpenSSL_st_var<T> &
+TAO::SSLIOP::OpenSSL_st_var<T>::operator= (T * st)
+{
+ TAO::SSLIOP::OpenSSL_traits<T>::release (this->st_);
+ this->st_ = st;
+ return *this;
+}
+
+template <typename T> ACE_INLINE TAO::SSLIOP::OpenSSL_st_var<T> &
+TAO::SSLIOP::OpenSSL_st_var<T>::operator= (
+ TAO::SSLIOP::OpenSSL_st_var<T> const & st)
+{
+ if (this != &st)
+ {
+ TAO::SSLIOP::OpenSSL_traits<T>::release (this->st_);
+ this->st_ = TAO::SSLIOP::OpenSSL_traits<T>::_duplicate (st.ptr ());
+ }
+
+ return *this;
+}
+
+template <typename T> ACE_INLINE TAO::SSLIOP::OpenSSL_st_var<T> &
+TAO::SSLIOP::OpenSSL_st_var<T>::operator= (T const & st)
+{
+ if (this->st_ != &st)
+ {
+ TAO::SSLIOP::OpenSSL_traits<T>::release (this->st_);
+ this->st_ = TAO::SSLIOP::OpenSSL_traits<T>::copy (st);
+ }
+
+ return *this;
+}
+
+template <typename T> ACE_INLINE T const *
+TAO::SSLIOP::OpenSSL_st_var<T>::operator-> (void) const
+{
+ return this->st_;
+}
+
+template <typename T> ACE_INLINE T *
+TAO::SSLIOP::OpenSSL_st_var<T>::operator-> (void)
+{
+ return this->st_;
+}
+
+template <typename T> ACE_INLINE
+TAO::SSLIOP::OpenSSL_st_var<T>::operator T const &() const
+{
+ return *this->st_;
+}
+
+template <typename T> ACE_INLINE
+TAO::SSLIOP::OpenSSL_st_var<T>::operator T &()
+{
+ return *this->st_;
+}
+
+template <typename T> ACE_INLINE T *
+TAO::SSLIOP::OpenSSL_st_var<T>::in (void) const
+{
+ return this->st_;
+}
+
+template <typename T> ACE_INLINE T *&
+TAO::SSLIOP::OpenSSL_st_var<T>::inout (void)
+{
+ return this->st_;
+}
+
+template <typename T> ACE_INLINE T *&
+TAO::SSLIOP::OpenSSL_st_var<T>::out (void)
+{
+ TAO::SSLIOP::OpenSSL_traits<T>::release (this->st_);
+ this->st_ = 0;
+ return this->st_;
+}
+
+template <typename T> ACE_INLINE T *
+TAO::SSLIOP::OpenSSL_st_var<T>::_retn (void)
+{
+ // Yield ownership of the OpenSSL structure.
+ T * st = this->st_;
+ this->st_ = 0;
+ return st;
+}
+
+template <typename T> ACE_INLINE T *
+TAO::SSLIOP::OpenSSL_st_var<T>::ptr (void) const
+{
+ return this->st_;
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL