You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2010/05/26 00:26:26 UTC

svn commit: r948224 - in /activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/internal/net/ssl/openssl: OpenSSLParameters.cpp OpenSSLParameters.h

Author: tabish
Date: Tue May 25 22:26:26 2010
New Revision: 948224

URL: http://svn.apache.org/viewvc?rev=948224&view=rev
Log:
https://issues.apache.org/activemq/browse/AMQCPP-140

Implements all the common data shared between client and server ssl sockets.

Modified:
    activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/internal/net/ssl/openssl/OpenSSLParameters.cpp
    activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/internal/net/ssl/openssl/OpenSSLParameters.h

Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/internal/net/ssl/openssl/OpenSSLParameters.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/internal/net/ssl/openssl/OpenSSLParameters.cpp?rev=948224&r1=948223&r2=948224&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/internal/net/ssl/openssl/OpenSSLParameters.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/internal/net/ssl/openssl/OpenSSLParameters.cpp Tue May 25 22:26:26 2010
@@ -17,7 +17,17 @@
 
 #include "OpenSSLParameters.h"
 
+#include <decaf/lang/exceptions/NullPointerException.h>
+
+#ifdef HAVE_OPENSSL
+#include <openssl/ssl.h>
+#endif
+
+#include <memory>
+
 using namespace decaf;
+using namespace decaf::lang;
+using namespace decaf::lang::exceptions;
 using namespace decaf::internal;
 using namespace decaf::internal::net;
 using namespace decaf::internal::net::ssl;
@@ -28,6 +38,12 @@ using namespace decaf::internal::net::ss
 ////////////////////////////////////////////////////////////////////////////////
 OpenSSLParameters::OpenSSLParameters( SSL_CTX* context ) : context( context ) {
 
+    if( context == NULL ) {
+        throw NullPointerException( __FILE__, __LINE__, "SSL Context was NULL" );
+    }
+
+    // Create a new SSL instance for this Parameters object, each one needs its own.
+    this->ssl = SSL_new( context );
 }
 
 #endif
@@ -35,7 +51,65 @@ OpenSSLParameters::OpenSSLParameters( SS
 ////////////////////////////////////////////////////////////////////////////////
 OpenSSLParameters::~OpenSSLParameters() {
 
+    try {
 #ifdef HAVE_OPENSSL
 
+    SSL_free( this->ssl );
+
+#endif
+    }
+    DECAF_CATCH_NOTHROW( Exception )
+    DECAF_CATCHALL_NOTHROW()
+}
+
+////////////////////////////////////////////////////////////////////////////////
+std::vector<std::string> OpenSSLParameters::getSupportedCipherSuites() const {
+    return std::vector<std::string>();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+std::vector<std::string> OpenSSLParameters::getSupportedProtocols() const {
+    return std::vector<std::string>();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+std::vector<std::string> OpenSSLParameters::getEnabledCipherSuites() const {
+    return std::vector<std::string>();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void OpenSSLParameters::setEnabledCipherSuites( const std::vector<std::string>& suites ) {
+
+}
+
+////////////////////////////////////////////////////////////////////////////////
+std::vector<std::string> OpenSSLParameters::getEnabledProtocols() const {
+    return std::vector<std::string>();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void OpenSSLParameters::setEnabledProtocols( const std::vector<std::string>& protocols ) {
+
+}
+
+////////////////////////////////////////////////////////////////////////////////
+OpenSSLParameters* OpenSSLParameters::clonse() const {
+
+#ifdef HAVE_OPENSSL
+
+    std::auto_ptr<OpenSSLParameters> cloned( new OpenSSLParameters( this->context ) );
+
+    cloned->setEnabledCipherSuites( this->getEnabledCipherSuites() );
+    cloned->setEnabledProtocols( this->getEnabledProtocols() );
+    cloned->needClientAuth = this->needClientAuth;
+    cloned->wantClientAuth = this->wantClientAuth;
+    cloned->useClientMode = this->useClientMode;
+
+    return cloned.release();
+
+#else
+
+    return NULL;
+
 #endif
 }

Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/internal/net/ssl/openssl/OpenSSLParameters.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/internal/net/ssl/openssl/OpenSSLParameters.h?rev=948224&r1=948223&r2=948224&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/internal/net/ssl/openssl/OpenSSLParameters.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/internal/net/ssl/openssl/OpenSSLParameters.h Tue May 25 22:26:26 2010
@@ -84,9 +84,36 @@ namespace openssl {
             this->useClientMode = value;
         }
 
+        std::vector<std::string> getSupportedCipherSuites() const;
+
+        std::vector<std::string> getSupportedProtocols() const;
+
+        std::vector<std::string> getEnabledCipherSuites() const;
+
+        void setEnabledCipherSuites( const std::vector<std::string>& suites );
+
+        std::vector<std::string> getEnabledProtocols() const;
+
+        void setEnabledProtocols( const std::vector<std::string>& protocols );
+
 #ifdef HAVE_OPENSSL
 
+        SSL_CTX* getSSLContext() const {
+            return this->context;
+        }
+
+        SSL* getSSL() const {
+            return this->ssl;
+        }
+
 #endif
+
+        /**
+         * Creates a clone of this object such that all settings are transferred to a new
+         * instance of an SSL object whose parent is the same SSL_CTX as this object's.
+         */
+        OpenSSLParameters* clonse() const;
+
     };
 
 }}}}}