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]