Author: astitcher
Date: Wed Oct 24 05:51:38 2012
New Revision: 1401560

URL: http://svn.apache.org/viewvc?rev=1401560&view=rev
Log:
QPID-4272: Large amounts of code are duplicated between the SSL and TCP 
transports
Add the security related functions to the Socket/Asynch interfaces

Modified:
    qpid/trunk/qpid/cpp/src/qpid/broker/windows/SslProtocolFactory.cpp
    qpid/trunk/qpid/cpp/src/qpid/sys/AsynchIO.h
    qpid/trunk/qpid/cpp/src/qpid/sys/AsynchIOHandler.cpp
    qpid/trunk/qpid/cpp/src/qpid/sys/AsynchIOHandler.h
    qpid/trunk/qpid/cpp/src/qpid/sys/SecuritySettings.h
    qpid/trunk/qpid/cpp/src/qpid/sys/Socket.h
    qpid/trunk/qpid/cpp/src/qpid/sys/SslPlugin.cpp
    qpid/trunk/qpid/cpp/src/qpid/sys/TCPIOPlugin.cpp
    qpid/trunk/qpid/cpp/src/qpid/sys/posix/AsynchIO.cpp
    qpid/trunk/qpid/cpp/src/qpid/sys/posix/BSDSocket.cpp
    qpid/trunk/qpid/cpp/src/qpid/sys/posix/BSDSocket.h
    qpid/trunk/qpid/cpp/src/qpid/sys/ssl/SslHandler.cpp
    qpid/trunk/qpid/cpp/src/qpid/sys/ssl/SslHandler.h
    qpid/trunk/qpid/cpp/src/qpid/sys/windows/AsynchIO.cpp
    qpid/trunk/qpid/cpp/src/qpid/sys/windows/SslAsynchIO.cpp
    qpid/trunk/qpid/cpp/src/qpid/sys/windows/SslAsynchIO.h
    qpid/trunk/qpid/cpp/src/qpid/sys/windows/WinSocket.cpp
    qpid/trunk/qpid/cpp/src/qpid/sys/windows/WinSocket.h

Modified: qpid/trunk/qpid/cpp/src/qpid/broker/windows/SslProtocolFactory.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/windows/SslProtocolFactory.cpp?rev=1401560&r1=1401559&r2=1401560&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/windows/SslProtocolFactory.cpp 
(original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/windows/SslProtocolFactory.cpp Wed Oct 
24 05:51:38 2012
@@ -245,7 +245,7 @@ void SslProtocolFactory::established(sys
                                      const qpid::sys::Socket& s,
                                      sys::ConnectionCodec::Factory* f,
                                      bool isClient) {
-    sys::AsynchIOHandler* async = new sys::AsynchIOHandler(s.getFullAddress(), 
f);
+    sys::AsynchIOHandler* async = new sys::AsynchIOHandler(s.getFullAddress(), 
f, false);
 
     if (tcpNoDelay) {
         s.setTcpNoDelay();

Modified: qpid/trunk/qpid/cpp/src/qpid/sys/AsynchIO.h
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/AsynchIO.h?rev=1401560&r1=1401559&r2=1401560&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/AsynchIO.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/AsynchIO.h Wed Oct 24 05:51:38 2012
@@ -21,9 +21,11 @@
  *
  */
 
-#include "qpid/sys/IntegerTypes.h"
 #include "qpid/CommonImportExport.h"
 
+#include "qpid/sys/IntegerTypes.h"
+#include "qpid/sys/SecuritySettings.h"
+
 #include <string.h>
 
 #include <boost/function.hpp>
@@ -160,6 +162,8 @@ public:
     virtual void requestCallback(RequestCallback) = 0;
     virtual BufferBase* getQueuedBuffer() = 0;
 
+    virtual SecuritySettings getSecuritySettings() = 0;
+
 protected:
     // Derived class manages lifetime; must be constructed using the
     // static create() method. Deletes not allowed from outside.

Modified: qpid/trunk/qpid/cpp/src/qpid/sys/AsynchIOHandler.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/AsynchIOHandler.cpp?rev=1401560&r1=1401559&r2=1401560&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/AsynchIOHandler.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/AsynchIOHandler.cpp Wed Oct 24 05:51:38 
2012
@@ -51,7 +51,7 @@ struct ProtocolTimeoutTask : public sys:
     }
 };
 
-AsynchIOHandler::AsynchIOHandler(const std::string& id, 
ConnectionCodec::Factory* f) :
+AsynchIOHandler::AsynchIOHandler(const std::string& id, 
ConnectionCodec::Factory* f, bool nodict0) :
     identifier(id),
     aio(0),
     factory(f),
@@ -59,6 +59,7 @@ AsynchIOHandler::AsynchIOHandler(const s
     reads(0),
     readError(false),
     isClient(false),
+    nodict(nodict0),
     readCredit(InfiniteCredit)
 {}
 
@@ -118,6 +119,15 @@ void AsynchIOHandler::giveReadCredit(int
         aio->startReading();
 }
 
+namespace {
+    SecuritySettings getSecuritySettings(AsynchIO* aio, bool nodict)
+    {
+        SecuritySettings settings = aio->getSecuritySettings();
+        settings.nodict = nodict;
+        return settings;
+    }
+}
+
 void AsynchIOHandler::readbuff(AsynchIO& , AsynchIO::BufferBase* buff) {
     if (readError) {
         return;
@@ -168,7 +178,7 @@ void AsynchIOHandler::readbuff(AsynchIO&
 
             QPID_LOG(debug, "RECV [" << identifier << "]: INIT(" << 
protocolInit << ")");
             try {
-                codec = factory->create(protocolInit.getVersion(), *this, 
identifier, SecuritySettings());
+                codec = factory->create(protocolInit.getVersion(), *this, 
identifier, getSecuritySettings(aio, nodict));
                 if (!codec) {
                     //TODO: may still want to revise this...
                     //send valid version header & close connection.
@@ -226,7 +236,7 @@ void AsynchIOHandler::nobuffs(AsynchIO&)
 
 void AsynchIOHandler::idle(AsynchIO&){
     if (isClient && codec == 0) {
-        codec = factory->create(*this, identifier, SecuritySettings());
+        codec = factory->create(*this, identifier, getSecuritySettings(aio, 
nodict));
         write(framing::ProtocolInitiation(codec->getVersion()));
         // We've just sent the protocol negotiation so we can cancel the 
timeout for that
         // This is not ideal, because we've not received anything yet, but 
heartbeats will

Modified: qpid/trunk/qpid/cpp/src/qpid/sys/AsynchIOHandler.h
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/AsynchIOHandler.h?rev=1401560&r1=1401559&r2=1401560&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/AsynchIOHandler.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/AsynchIOHandler.h Wed Oct 24 05:51:38 2012
@@ -51,6 +51,7 @@ class AsynchIOHandler : public OutputCon
     uint32_t reads;
     bool readError;
     bool isClient;
+    bool nodict;
     AtomicValue<int32_t> readCredit;
     static const int32_t InfiniteCredit = -1;
     Mutex creditLock;
@@ -59,7 +60,7 @@ class AsynchIOHandler : public OutputCon
     void write(const framing::ProtocolInitiation&);
 
   public:
-    QPID_COMMON_EXTERN AsynchIOHandler(const std::string& id, 
qpid::sys::ConnectionCodec::Factory* f );
+    QPID_COMMON_EXTERN AsynchIOHandler(const std::string& id, 
qpid::sys::ConnectionCodec::Factory* f, bool nodict);
     QPID_COMMON_EXTERN ~AsynchIOHandler();
     QPID_COMMON_EXTERN void init(AsynchIO* a, Timer& timer, uint32_t maxTime);
 

Modified: qpid/trunk/qpid/cpp/src/qpid/sys/SecuritySettings.h
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/SecuritySettings.h?rev=1401560&r1=1401559&r2=1401560&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/SecuritySettings.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/SecuritySettings.h Wed Oct 24 05:51:38 2012
@@ -21,6 +21,8 @@
  * under the License.
  *
  */
+#include <string>
+
 namespace qpid {
 namespace sys {
 

Modified: qpid/trunk/qpid/cpp/src/qpid/sys/Socket.h
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/Socket.h?rev=1401560&r1=1401559&r2=1401560&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/Socket.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/Socket.h Wed Oct 24 05:51:38 2012
@@ -85,6 +85,10 @@ public:
 
     virtual int read(void *buf, size_t count) const = 0;
     virtual int write(const void *buf, size_t count) const = 0;
+
+    /* Transport security related: */
+    virtual int getKeyLen() const = 0;
+    virtual std::string getClientAuthId() const = 0;
 };
 
 /** Make the default socket for whatever platform we are executing on

Modified: qpid/trunk/qpid/cpp/src/qpid/sys/SslPlugin.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/SslPlugin.cpp?rev=1401560&r1=1401559&r2=1401560&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/SslPlugin.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/SslPlugin.cpp Wed Oct 24 05:51:38 2012
@@ -236,7 +236,7 @@ void SslMuxProtocolFactory::established(
         return;
     }
 
-    AsynchIOHandler* async = new AsynchIOHandler(s.getFullAddress(), f);
+    AsynchIOHandler* async = new AsynchIOHandler(s.getFullAddress(), f, false);
 
     if (tcpNoDelay) {
         s.setTcpNoDelay();

Modified: qpid/trunk/qpid/cpp/src/qpid/sys/TCPIOPlugin.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/TCPIOPlugin.cpp?rev=1401560&r1=1401559&r2=1401560&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/TCPIOPlugin.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/TCPIOPlugin.cpp Wed Oct 24 05:51:38 2012
@@ -148,7 +148,7 @@ AsynchIOProtocolFactory::AsynchIOProtoco
 
 void AsynchIOProtocolFactory::established(Poller::shared_ptr poller, const 
Socket& s,
                                           ConnectionCodec::Factory* f, bool 
isClient) {
-    AsynchIOHandler* async = new AsynchIOHandler(s.getFullAddress(), f);
+    AsynchIOHandler* async = new AsynchIOHandler(s.getFullAddress(), f, false);
 
     if (tcpNoDelay) {
         s.setTcpNoDelay();

Modified: qpid/trunk/qpid/cpp/src/qpid/sys/posix/AsynchIO.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/posix/AsynchIO.cpp?rev=1401560&r1=1401559&r2=1401560&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/posix/AsynchIO.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/posix/AsynchIO.cpp Wed Oct 24 05:51:38 2012
@@ -251,6 +251,7 @@ public:
     virtual void stopReading();
     virtual void requestCallback(RequestCallback);
     virtual BufferBase* getQueuedBuffer();
+    virtual SecuritySettings getSecuritySettings();
 
 private:
     ~AsynchIO();
@@ -626,6 +627,13 @@ void AsynchIO::close(DispatchHandle& h) 
     }
 }
 
+SecuritySettings AsynchIO::getSecuritySettings() {
+    SecuritySettings settings;
+    settings.ssf = socket.getKeyLen();
+    settings.authid = socket.getClientAuthId();
+    return settings;
+}
+
 } // namespace posix
 
 AsynchAcceptor* AsynchAcceptor::create(const Socket& s, 

Modified: qpid/trunk/qpid/cpp/src/qpid/sys/posix/BSDSocket.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/posix/BSDSocket.cpp?rev=1401560&r1=1401559&r2=1401560&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/posix/BSDSocket.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/posix/BSDSocket.cpp Wed Oct 24 05:51:38 
2012
@@ -252,4 +252,14 @@ int BSDSocket::getError() const
     return result;
 }
 
+int BSDSocket::getKeyLen() const
+{
+    return 0;
+}
+
+std::string BSDSocket::getClientAuthId() const
+{
+    return std::string();
+}
+
 }} // namespace qpid::sys

Modified: qpid/trunk/qpid/cpp/src/qpid/sys/posix/BSDSocket.h
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/posix/BSDSocket.h?rev=1401560&r1=1401559&r2=1401560&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/posix/BSDSocket.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/posix/BSDSocket.h Wed Oct 24 05:51:38 2012
@@ -89,6 +89,9 @@ public:
     QPID_COMMON_EXTERN virtual int read(void *buf, size_t count) const;
     QPID_COMMON_EXTERN virtual int write(const void *buf, size_t count) const;
 
+    QPID_COMMON_EXTERN int getKeyLen() const;
+    QPID_COMMON_EXTERN std::string getClientAuthId() const;
+
 protected:
     /** Create socket */
     void createSocket(const SocketAddress&) const;

Modified: qpid/trunk/qpid/cpp/src/qpid/sys/ssl/SslHandler.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/ssl/SslHandler.cpp?rev=1401560&r1=1401559&r2=1401560&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/ssl/SslHandler.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/ssl/SslHandler.cpp Wed Oct 24 05:51:38 2012
@@ -69,7 +69,7 @@ SslHandler::~SslHandler() {
     delete codec;
 }
 
-void SslHandler::init(SslIO* a, Timer& timer, uint32_t maxTime) {
+void SslHandler::init(AsynchIO* a, Timer& timer, uint32_t maxTime) {
     aio = a;
 
     // Start timer for this connection
@@ -209,7 +209,7 @@ void SslHandler::idle(AsynchIO&){
         aio->queueWriteClose();
 }
 
-SecuritySettings SslHandler::getSecuritySettings(SslIO* aio)
+SecuritySettings SslHandler::getSecuritySettings(AsynchIO* aio)
 {
     SecuritySettings settings = aio->getSecuritySettings();
     settings.nodict = nodict;

Modified: qpid/trunk/qpid/cpp/src/qpid/sys/ssl/SslHandler.h
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/ssl/SslHandler.h?rev=1401560&r1=1401559&r2=1401560&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/ssl/SslHandler.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/ssl/SslHandler.h Wed Oct 24 05:51:38 2012
@@ -44,11 +44,9 @@ class TimerTask;
 
 namespace ssl {
 
-class SslIO;
-
 class SslHandler : public OutputControl {
     std::string identifier;
-    SslIO* aio;
+    AsynchIO* aio;
     ConnectionCodec::Factory* factory;
     ConnectionCodec* codec;
     bool readError;
@@ -57,12 +55,12 @@ class SslHandler : public OutputControl 
     boost::intrusive_ptr<sys::TimerTask> timeoutTimerTask;
 
     void write(const framing::ProtocolInitiation&);
-    qpid::sys::SecuritySettings getSecuritySettings(SslIO* aio);
+    qpid::sys::SecuritySettings getSecuritySettings(AsynchIO* aio);
 
   public:
     SslHandler(std::string id, ConnectionCodec::Factory* f, bool nodict);
     ~SslHandler();
-    void init(SslIO* a, Timer& timer, uint32_t maxTime);
+    void init(AsynchIO* a, Timer& timer, uint32_t maxTime);
 
     void setClient() { isClient = true; }
 

Modified: qpid/trunk/qpid/cpp/src/qpid/sys/windows/AsynchIO.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/windows/AsynchIO.cpp?rev=1401560&r1=1401559&r2=1401560&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/windows/AsynchIO.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/windows/AsynchIO.cpp Wed Oct 24 05:51:38 
2012
@@ -290,6 +290,8 @@ public:
      */
     virtual BufferBase* getQueuedBuffer();
 
+    virtual SecuritySettings getSecuritySettings(void);
+
 private:
     ReadCallback readCallback;
     EofCallback eofCallback;
@@ -657,6 +659,13 @@ void AsynchIO::close(void) {
     notifyClosed();
 }
 
+SecuritySettings AsynchIO::getSecuritySettings() {
+    SecuritySettings settings;
+    settings.ssf = socket.getKeyLen();
+    settings.authid = socket.getClientAuthId();
+    return settings;
+}
+
 void AsynchIO::readComplete(AsynchReadResult *result) {
     int status = result->getStatus();
     size_t bytes = result->getTransferred();

Modified: qpid/trunk/qpid/cpp/src/qpid/sys/windows/SslAsynchIO.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/windows/SslAsynchIO.cpp?rev=1401560&r1=1401559&r2=1401560&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/windows/SslAsynchIO.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/windows/SslAsynchIO.cpp Wed Oct 24 
05:51:38 2012
@@ -241,11 +241,15 @@ AsynchIO::BufferBase* SslAsynchIO::getQu
     return sslBuff;
 }
 
-unsigned int SslAsynchIO::getSslKeySize() {
+SecuritySettings SslAsynchIO::getSecuritySettings() {
     SecPkgContext_KeyInfo info;
     memset(&info, 0, sizeof(info));
     ::QueryContextAttributes(&ctxtHandle, SECPKG_ATTR_KEY_INFO, &info);
-    return info.KeySize;
+
+    SecuritySettings settings;
+    settings.ssf = info.KeySize;
+    settings.authid = std::string();
+    return settings;
 }
 
 void SslAsynchIO::negotiationDone() {

Modified: qpid/trunk/qpid/cpp/src/qpid/sys/windows/SslAsynchIO.h
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/windows/SslAsynchIO.h?rev=1401560&r1=1401559&r2=1401560&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/windows/SslAsynchIO.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/windows/SslAsynchIO.h Wed Oct 24 05:51:38 
2012
@@ -81,8 +81,7 @@ public:
     virtual void stopReading();
     virtual void requestCallback(RequestCallback);
     virtual BufferBase* getQueuedBuffer();
-
-    QPID_COMMON_EXTERN unsigned int getSslKeySize();
+    virtual SecuritySettings getSecuritySettings(void);
 
 protected:
     CredHandle credHandle;

Modified: qpid/trunk/qpid/cpp/src/qpid/sys/windows/WinSocket.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/windows/WinSocket.cpp?rev=1401560&r1=1401559&r2=1401560&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/windows/WinSocket.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/windows/WinSocket.cpp Wed Oct 24 05:51:38 
2012
@@ -258,4 +258,14 @@ void WinSocket::setTcpNoDelay() const
     }
 }
 
+int WinSocket::getKeyLen() const
+{
+    return 0;
+}
+
+std::string WinSocket::getClientAuthId() const
+{
+    return std::string();
+}
+
 }} // namespace qpid::sys

Modified: qpid/trunk/qpid/cpp/src/qpid/sys/windows/WinSocket.h
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/windows/WinSocket.h?rev=1401560&r1=1401559&r2=1401560&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/windows/WinSocket.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/windows/WinSocket.h Wed Oct 24 05:51:38 
2012
@@ -95,6 +95,9 @@ public:
     QPID_COMMON_EXTERN virtual int read(void *buf, size_t count) const;
     QPID_COMMON_EXTERN virtual int write(const void *buf, size_t count) const;
 
+    QPID_COMMON_EXTERN int getKeyLen() const;
+    QPID_COMMON_EXTERN std::string getClientAuthId() const;
+
 protected:
     /** Create socket */
     void createSocket(const SocketAddress&) const;



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to